home *** CD-ROM | disk | FTP | other *** search
- MODULE sierpinski;
-
- FROM Terminal IMPORT Read;
- FROM LineDrawing IMPORT width, height, Px, Py, clear, line;
-
- CONST SquareSize = 512;
-
- VAR i,h,x0,y0: CARDINAL;
- ch: CHAR;
-
- PROCEDURE A(k: CARDINAL);
- BEGIN
- IF k > 0 THEN
- A(k-1); line(7,h);
- B(k-1); line(0,2*h);
- D(k-1); line(1,h);
- A(k-1)
- END
- END A;
-
- PROCEDURE B(k: CARDINAL);
- BEGIN
- IF k > 0 THEN
- B(k-1); line(5,h);
- C(k-1); line(6,2*h);
- A(k-1); line(7,h);
- B(k-1)
- END
- END B;
-
- PROCEDURE C(k: CARDINAL);
- BEGIN
- IF k > 0 THEN
- C(k-1); line(3,h);
- D(k-1); line(4,2*h);
- B(k-1); line(5,h);
- C(k-1)
- END
- END C;
-
- PROCEDURE D(k: CARDINAL);
- BEGIN
- IF k > 0 THEN
- D(k-1); line(1,h);
- A(k-1); line(2,2*h);
- C(k-1); line(3,h);
- D(k-1)
- END
- END D;
-
- BEGIN
- clear; i := 0;
- h := SquareSize DIV 4;
- x0 := CARDINAL(width) DIV 2;
- y0 := CARDINAL(height) DIV 2 + h;
- REPEAT
- INC(i);
- x0 := x0-h;
- h := h DIV 2;
- y0 := y0 + h;
- Px := x0; Py := y0;
- A(i); line(7,h);
- B(i); line(5,h);
- C(i); line(3,h);
- D(i); line(1,h);
- Read(ch)
- UNTIL (i = 6) OR (ch = 33C);
- clear
- END sierpinski.
-